草庐IT

Java Swingworker 和多线程

全部标签

java - 在 Java 中,对空闲线程使用 Thread.sleep(1) 是否有效?

我的线程中有一个主循环,其中一部分测试空闲boolean值是否为真。如果是,它将在每次循环迭代时调用Thread.sleep(1)。这是一种有效的方法吗?我的目标是让线程在空闲时占用最少的CPU。 最佳答案 没有。使用Object.wait相反,并确保您在包含boolean值的对象上同步。如果您不同步并且boolean不是volatile,您就没有内存屏障,因此无法保证轮询线程会看到对的更改boolean值。根据javadoc:Thismethodcausesthecurrentthread(callitT)toplaceitsel

Java vs C# 多线程性能,为什么 Java 变慢了? (包括图表和完整代码)

我最近一直在Java和C#上运行基准测试,以在线程池上安排1000个任务。服务器有4个物理处理器,每个处理器有8个内核。操作系统为Server2008,内存为32GB,每个CPU为Xeonx7550Westmere/Nehalem-C。简而言之,Java实现在4个线程时比C#快得多,但随着线程数的增加而慢得多。当线程数增加时,C#似乎每次迭代都变得更快。图表包含在这篇文章中:Java实现是在64位HotspotJVM上编写的,使用Java7并使用我在网上找到的ExecutorService线程池(见下文)。我还将JVM设置为并发GC。C#是在.net3.5上编写的,线程池来自codep

java - 如果您只有一个写线程,您是否需要特殊的并发性?

假设:只有一个特定的线程曾经设置过某个引用字段(不是long或double,所以写入它是原子的)可以有任意数量的线程读取同一个字段稍微过时的读取是可以接受的(最多几秒钟)在这种情况下,您是否需要volatile或AtomicReference或类似的东西?Thisarticle状态:Memorybarriersarenotrequiredifyouadherestrictlytothesinglewriterprinciple.这似乎表明,在我描述的情况下,您真的不需要做任何特别的事情。所以,这是我运行的测试,结果很奇怪:importorg.junit.Test;publicclass

java - 多线程修改StringBuilder

我问的问题与DifferencebetweenStringBuilderandStringBuffer有关但不一样。我想看看如果StringBuilder同时被两个线程修改会发生什么。我编写了以下类:publicclassThreadTester{publicstaticvoidmain(String[]args)throwsInterruptedException{RunnablethreadJob=newMyRunnable();ThreadmyThread=newThread(threadJob);myThread.start();for(inti=0;i最初我在StringCo

java - 有没有办法确保将线程分配给指定的一组对象?

我们正在开发一个应用程序,其中一组对象可以通过接收来自3个不同来源的消息来影响。每条消息(来自任何来源)都有一个对象作为其目标。每个消息接收者都将在自己的线程上运行。我们希望消息的处理(接收后)尽可能高速,因此针对目标对象的消息处理将由线程池中的另一个线程完成。消息的处理将比读取/接收来自发件人的消息花费更长的时间。我在想,如果池中的每个线程只专用于一组特定的对象,它会更快,例如:Thread1->objectsnamedA-LThread2->objectsnamedM-Z每组对象(或线程)都有专门的消息队列等待处理。我的假设是,如果唯一需要的线程同步是在每个接收线程和一个处理线程之

java - Glassfish线程池问题

我们使用的是Glassfish3.0.1,响应时间非常长;对于25%的POST/PUT请求,大约需要5分钟,当响应返回时,前置负载均衡器已经超时。我的理论是请求正在排队等待可用线程。我认为这是因为访问日志显示请求需要几秒钟才能完成,但执行请求的时间比我预期的晚了五分钟。有没有人对调试线程池的运行情况有任何建议?或者最适合他们的设置是什么?是否需要定期进行线程转储,还是一次性转储就足够了? 最佳答案 乍一看,这似乎与线程池本身关系不大。在不太了解网络设置的其余部分的情况下,我会检查以下几点:负载平衡器池中是否有死机/无响应节点?这可能

java - 如何在多线程环境下更好的使用ExecutorService?

我需要创建一个库,其中包含同步和异步方法。executeSynchronous()-等到我有结果,返回结果。executeAsynchronous()-立即返回一个Future,如果需要,可以在完成其他事情后对其进行处理。我的库的核心逻辑客户将使用我们的库,他们将通过传递DataKey构建器对象来调用它。然后,我们将使用该DataKey对象构造一个URL,并通过执行它对该URL进行HTTP客户端调用,在我们将响应作为JSON字符串返回后,我们将该JSON字符串发送回我们的客户通过创建DataResponse对象。有些客户会调用executeSynchronous(),有些客户可能会调用

java - 非阻塞 I/O 与使用线程(上下文切换有多糟糕?)

我们在我工作的一个程序中经常使用套接字,我们有时同时处理来自多达大约100台机器的连接。我们有一个非阻塞的组合I/O与状态表一起使用来管理它和使用线程的传统Java套接字。我们在非阻塞套接字方面遇到了很多问题,我个人更喜欢使用线程来更好地处理套接字。所以我的问题是:在单个线程上使用非阻塞套接字可以节省多少?使用线程涉及的上下文切换有多糟糕?您可以扩展多少个并发连接以使用Java中的线程模型? 最佳答案 I/O和非阻塞I/O选择取决于您的服务器Activity配置文件。例如。如果您使用长期连接和数千个客户端,则I/O可能会因为系统资源

java - 线程中断未结束对输入流读取的阻塞调用

我正在使用RXTX从串口读取数据。读取是在以下列方式生成的线程中完成的:CommPortIdentifierportIdentifier=CommPortIdentifier.getPortIdentifier(port);CommPortcomm=portIdentifier.open("Whatever",2000);SerialPortserial=(SerialPort)comm;...settingsThreadt=newThread(newSerialReader(serial.getInputStream()));t.start();SerialReader类实现了Run

Java停放线程

Java中的停放线程和等待线程有什么区别?我有一个jboss核心转储,分析它显示有很多停放的线程。 最佳答案 看Javadocpark()方法:Disablesthecurrentthreadforthreadschedulingpurposesunlessthepermitisavailable.Ifthepermitisavailablethenitisconsumedandthecallreturnsimmediately;otherwisethecurrentthreadbecomesdisabledforthreadsch